// pda的特色设置中需要关闭-禁止将扫描按键的键值传递给应用的开关
let mainActivity; // 运行时的主要活动activity
let intentFilter; // 实例化的意图过滤器
let broadcastReceiver; // 广播接收器
let repeatFlag = false;

// 初始化定义广播
const init = (onReceiveCallback) => {
	/* #ifdef APP-PLUS */
	// 获取activity
	mainActivity = plus.android.runtimeMainActivity();
	// 导入类
	const IntentFilter = plus.android.importClass("android.content.IntentFilter");
	// 实例化一个意图过滤器
	intentFilter = new IntentFilter();
	// addAction添加动作, com.android.server.scannerservice.broadcast为设备配置的广播名称
	intentFilter.addAction("com.android.server.scannerservice.broadcast");
	// BroadcastReceiver广播接收器接口:implements 实现接口  onReceive实现接口的方法
	broadcastReceiver = plus.android.implements(
		"io.dcloud.feature.internal.reflect.BroadcastReceiver",
		{
			onReceive: function (context, intent) {
				plus.android.importClass(intent);
				// 扫描设置的开发者选项--手持机pda的广播键值scannerdata
				let code = intent.getStringExtra("scannerdata");
				code = code.trim();
				code = removeNewlines(code);
				console.log("pda原始扫描数据:");
				// 防重复
				if (repeatFlag) return;
				repeatFlag = true;
				setTimeout(function () {
					repeatFlag = false;
				}, 150);
				// 到这里扫描成功,获取结果，可以调用自己的业务逻辑
				onReceiveCallback && onReceiveCallback(code);
			},
		},
	);
	/* #endif */
};

function removeNewlines(str) {
	let result = "";
	for (let i = 0; i < str.length; i++) {
		if (str[i] !== "\n" && str[i] !== "\r") {
			result += str[i];
		}
	}
	return result;
}

// 开始广播监听扫码
const start = () => {
	/* #ifdef APP-PLUS */
	mainActivity.registerReceiver(broadcastReceiver, intentFilter);
	/* #endif */
};

// 停止广播监听扫码
const stop = () => {
	/* #ifdef APP-PLUS */
	mainActivity.unregisterReceiver(broadcastReceiver);
	/* #endif */
};

// 主动触发扫描
const triggerScan = () => {
	console.log("trigger");
	// 获取Android意图类
	const Intent = plus.android.importClass("android.content.Intent");
	// 实例化意图
	const intent = new Intent();
	// 定义意图，由厂商提供(此处设置为东大的：开始扫描广播com.scan.onStartScan，对应的停止扫描广播为com.scan.onEndScan)
	intent.setAction("com.scan.onStartScan");
	// 广播这个意图
	mainActivity.sendBroadcast(intent);
};

export const broadcastScan = {
	init,
	start,
	stop,
	triggerScan,
};

// 引入使用
// 	import { broadcastScan } from './scanCode.js';
